package javase2.day04.demo01;

import java.util.*;

/*
使用双列Map(HashMap)集合
按照斗地主的规则，完成洗牌发牌的动作。
具体规则：
 1. 组装54张扑克牌将
 2. 54张牌顺序打乱
 3. 三个玩家参与游戏，三人交替摸牌，每人17张牌，最后三张留作底牌。
 4. 查看三人各自手中的牌（按照牌的大小排序）、底牌
    规则：手中扑克牌从大到小的摆放顺序：大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3
    那么就要有序列
 */
public class Demo09ddz {
    public static void main(String[] args) {
        //1准备牌
        //创建【牌盒】Map集合，key：牌的序列，value：牌
        Map<Integer,String> paihe=new HashMap<>();
        //先放入特殊牌
        int index=0;
        String daWang="大王";
        paihe.put(index,daWang);
        index++;
        String xiaoWang="小王";
        paihe.put(index,xiaoWang);
        //组装普通牌后放入牌盒
        ArrayList<String> number=new ArrayList<>();
        number.add("2");
        number.add("A");
        number.add("K");
        number.add("Q");
        number.add("J");
        for(int i=10;i>=3;i--){
            number.add(i+"");
        }

        ArrayList<String> colors=new ArrayList<>();
        colors.add("♥");
        colors.add("♦");
        colors.add("♣");
        colors.add("♠");
        //组装
        for (String num:number) {
            for (String huase:colors) {
                //放入牌盒
                index++;
                paihe.put(index,num+huase);
            }
        }
        //遍历牌盒
//        for (Integer paixuhao:paihe.keySet()) {
//            System.out.println(paixuhao+"--》"+paihe.get(paixuhao));
//        }
        //2洗牌
        //【注意】由于不能对Map的key打乱
        //所以创建一个序号集合，发牌时发此集合，然后玩家拿着此集合的序号找到对应的牌
//      错误：Collections.shuffle(paihe);
        ArrayList<Integer> xuhao=new ArrayList<>();
        for (int i=0;i<=53;i++){
            xuhao.add(i);
        }
        Collections.shuffle(xuhao);
        System.out.println(xuhao);
        //3发牌
        ArrayList<Integer> plater1=new ArrayList<>();
        ArrayList<Integer> plater2=new ArrayList<>();
        ArrayList<Integer> plater3=new ArrayList<>();
        ArrayList<Integer> dipai=new ArrayList<>();

        for (int i=0;i<xuhao.size();i++){
            if(i>=51){
                dipai.add(xuhao.get(i));
            }else {
                if(i%3==0){
                    plater1.add(xuhao.get(i));
                }else if (i%3==1){
                    plater2.add(xuhao.get(i));
                }else {
                    plater3.add(xuhao.get(i));
                }
            }
        }
        //排序
        Collections.sort(plater1);
        Collections.sort(plater2);
        Collections.sort(plater3);
        Collections.sort(dipai);

        //4看牌
//        ArrayList<String> player1 = new ArrayList<String>();
//        ArrayList<String> player2 = new ArrayList<String>();
//        ArrayList<String> player3 = new ArrayList<String>();
//        ArrayList<String> dipaier = new ArrayList<String>();
//        for (Integer i:plater1){
//            String s = paihe.get(i);
//            player1.add(s);
//        }
//        for (Integer i:plater2){
//            String s = paihe.get(i);
//            player2.add(s);
//        }
//        for (Integer i:plater3){
//            String s = paihe.get(i);
//            player3.add(s);
//        }
//        for (Integer i:dipai){
//            String  s= paihe.get(i);
//            dipaier.add(s);
//        }
//        System.out.println("刘佳辉："+player1);
//        System.out.println("王凡："+player2);
//        System.out.println("史长春："+player3);
//        System.out.println("底牌：："+dipaier);
        show("刘佳辉",paihe,plater1);
        show("王凡",paihe,plater2);
        show("史长春",paihe,plater3);
        show("地主",paihe,dipai);
    }
    public static void show(String name,Map<Integer,String> poker,ArrayList<Integer> list){
        System.out.print(name+":");
        for (Integer i:list) {
            String s = poker.get(i);
            System.out.print(s+" ");
        }
        System.out.println();
    }
}
